package com.ouran.dao.user;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.annotation.Resource;

import org.hibernate.Query;
import org.springframework.orm.hibernate4.HibernateTemplate;
import org.springframework.stereotype.Repository;

import com.ouran.model.page.Pager;
import com.ouran.model.user.User;

/**
 * 用户模块Dao实现
 * @author lijiajun
 * @version 1.0
 * Date 2018/07/28
 */
@Repository("userDaoImpl")
public class UserDaoImpl implements UserDao {

	/**
	 * 引用hibernateTemplate操作模板
	 */
	@Resource
	HibernateTemplate hibernateTemplate;
	
//	@Resource
//    protected RedisTemplate<Serializable, Serializable> redisTemplate;
	
//	/**
//	 * redis缓存数据
//	 * @param user
//	 */
//	@Override
//	public void redisSaveUser(final User user) {
//        redisTemplate.execute(new RedisCallback<Object>() {
//
//            @Override
//            public Object doInRedis(RedisConnection connection) throws DataAccessException {
//                connection.set(redisTemplate.getStringSerializer().serialize("user.uid." + user.getId()),
//                               redisTemplate.getStringSerializer().serialize(user.getUserName()));
//                return null;
//            }
//        });
//    }

//	/**
//	 * redis读取数据
//	 * @param id
//	 * @return
//	 */
//    @Override
//    public User redisGetUser(final int id) {
//        return redisTemplate.execute(new RedisCallback<User>() {
//            @Override
//            public User doInRedis(RedisConnection connection) throws DataAccessException {
//                byte[] key = redisTemplate.getStringSerializer().serialize("user.uid." + id);
//                if (connection.exists(key)) {
//                    byte[] value = connection.get(key);
//                    String name = redisTemplate.getStringSerializer().deserialize(value);
//                    User user = new User();
//                    user.setUserName(name);
//                    user.setId(id);
//                    return user;
//                }
//                return null;
//            }
//        });
//    }
    

	/**
	 * 根据用户名密码查询用户信息
	 * @param userName 用户名
	 * @param passWord 密码
	 * @return user信息
	 */
	@Override
	public List<User> retrieve(String userName, String passWord) {
		List<User> list = new ArrayList<>();
		list = (List<User>) hibernateTemplate
				.find("from User as u where u.userName='" + userName
						+ "' and u.passWord='" + passWord + "'");

		if (list.size() > 0 && list != null)
			return list;
		return Collections.emptyList();
	}
	
	/**
	 * 新增用户
	 * @param user 
	 */
	@Override
	public void add(User user) {
		hibernateTemplate.save(user);
	}

	/**
	 * 查询所有用户
	 * @return 分页用户信息
	 */
	@Override
	public Pager<User> retrieveAll(Pager<User> pager) {
		Query query = this.hibernateTemplate.getSessionFactory()
				.getCurrentSession().createQuery("from User");
		query.setFirstResult(pager.getOffset()).setMaxResults(pager.getSize());
		List<User> datas = query.list();
		pager.setDatas(datas);
		long total = (Long) this.hibernateTemplate.getSessionFactory()
				.getCurrentSession().createQuery("select count(*) from User")
				.uniqueResult();
		pager.setTotal(total);
		return pager;
	}
	
	/**
	 * 根据用户id查询用户信息
	 * @param id
	 * @return 用户信息
	 */
	@Override
	public User load(int id) {
		return hibernateTemplate.load(User.class, id);
	}
	
	/**
	 * 根据用户userName查询用户信息
	 * @param userName
	 * @return 用户信息
	 */
	@Override
	public boolean load(String userName) {
		List<User> list = (List<User>) hibernateTemplate.find("from User as u where u.userName='" + userName + "'");
		return list.isEmpty();
	}
	
	/**
	 * 修改用户信息
	 * @param user
	 */
	@Override
	public void update(User user) {
		hibernateTemplate.update(user);
	}

	/**
	 * 根据用户id删除用户
	 * @param id
	 */
	@Override
	public void delete(int id) {
		User user = this.load(id);
		hibernateTemplate.delete(user);
	}
}
